package edu.shzu.manage.util;

import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;

/**
 * 该注解具备实体bean所具备的方法
 * @Data相当于 ：@Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode这5个注解的合集。
 *
 * @JsonInclude(JsonInclude.Include.NON_NULL) ：jackson 实体转json 为NULL的字段不参加序列化（即不显示）
 * @param <T>
 */
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Result<T> {
    private Integer code;
    private String message;
    private Object data;

    /**
     * 用于@valid 验证处理
     * @param code 错误码
     * @param message 错误提示信息
     */
    public Result(Integer code,String message) {
        this.code = code;
        this.message = message;
    }

    /**
     * 用于封装返回数据
     * @param code 返回码
     * @param message 提示信息
     * @param data
     */
    public Result(Integer code,String message,Object data){
        this.code = code;
        this.message = message;
        this.data = data;
    }

    /**
     * 系统错误
     * @param code
     * @param message
     * @return
     */
    public static Result<String> error(Integer code,String message){
        return new Result<>(code,message);
    }

    /**
     * 操作成功，返回数据
     * @param data
     * @return
     */
    public static Result<Object> success(Object data) {
        return new Result<>(200,"success",data);
    }

    /**
     * 操作成功，无返回数据
     * @return
     */
    public static Result<Object> success() {
        return new Result<>(200,"success");
    }

    /**
     * 操作失败 返回数据
     * @param data
     * @return
     */
    public static Result<Object> fail(Object data) {
        return new Result<>(200,"fail",data);
    }

    /**
     * 操作失败 无返回数据
     * @return
     */
    public static Result<Object> fail() {
        return new Result<>(200,"fail");
    }
}
